import jwt
from toutiao import Config


# 编码  生成token的抽取
# jwt.encode(payload, key, algorithm)

# 重写生成的token 添加必须的 过期时间
def generic_token(payload, expiry, secret=None):
    """
    :param payload:   用户传递过来的字典数据
    :param expiry:       过期时间
    :param secret:      秘钥
    :return:            token
    algorithm     算法
    """
    # 1.组织过期时间数据
    _payload = {
        'exp': expiry
    }
    # 2.将用户的字典数据，更新到我们的字典中
    _payload.update(payload)
    # 3.获取秘钥
    if secret is None:
        secret = Config.JWT_SECRET
    # 4.返回token  数据加密
    return jwt.encode(_payload, secret, algorithm='HS256').decode()


# 解码  抽取,方便后期修改
def verify_token(token, secret=None):
    # 验证token
    # token: 传递过来的token
    # secret: 秘钥
    # return: payload
    if secret is None:
        secret = Config.JWT_SECRET
    try:
        # 解码
        payload = jwt.decode(token, secret, algorithms=['HS256'])
    # except jwt.PyJWTError
    except Exception:
        # token 有异常,过期
        return None
    else:
        return payload
